package initialize

import (
	"fmt"
	"fresh-shop-gin/model/system"
	"fresh-shop-gin/utils"

	"go.uber.org/zap"
)

// 模型迁移
type Migration interface {
	TableName() string
	Migrate() error
}

// 全局模型注册表
var migrations = []Migration{
	&system.User{},
	&system.Role{},
}

// 初始化数据库迁移
func AutoMigrate() error {
	// 引入日志
	logger := utils.GetLogger()

	// 按顺序执行模型迁移
	for _, m := range migrations {
		logger.Info("开始迁移数据表", zap.String("table", m.TableName()))

		if err := m.Migrate(); err != nil {
			logger.Error("数据表迁移失败", zap.String("table", m.TableName()), zap.Error(err))
			return fmt.Errorf("%s 迁移失败: %w", m.TableName(), err)
		}
		logger.Info("数据表迁移成功", zap.String("table", m.TableName()))
	}
	return nil
}
